package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import POJO.Revista;

public class RevistaDao 
{
	Connection c;
	
	public RevistaDao()
	{
		GenericDao gDao = new GenericDao();
		c = gDao.getConnection();
	}
	
	public void RegistraRevista(Revista r) throws SQLException
	{
		String sql = "INSERT INTO Revista (codEditora, titulo, volume, numero, codCurso, codInstituicao )"
				+ " VALUES (?,?,?,?,?,?)";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, r.getCodEditora());
		ps.setString(2, r.getTitulo());
		ps.setInt(3, r.getVolume());
		ps.setInt(4, r.getNumero());
		ps.setInt(5, r.getCodCurso());
		ps.setInt(6, r.getInstituicao());
		ps.execute();
		ps.close();		
	}
	
	public void AtualizaRevista(Revista r) throws SQLException
	{
		String sql = "UPDATE Revista SET codEditora=?, titulo=?, volume=?, numero=?, codCurso=?, codInstituicao=? FROM Revista WHERE codRevista = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, r.getCodEditora());
		ps.setString(2, r.getTitulo());
		ps.setInt(3, r.getVolume());
		ps.setInt(4, r.getNumero());
		ps.setInt(5, r.getCodCurso());
		ps.setInt(6, r.getInstituicao());
		ps.setInt(7, r.getCodRevista());
		ps.execute();
		ps.close();	
	}
	
	public void RemoveRevista(Revista r) throws SQLException
	{
		String sql = "DELETE Revista WHERE codRevista = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, r.getCodRevista());
		ps.execute();
		ps.close();
	}
	
	public int GeraProximoCodigo() throws SQLException
	{
		int codigo = 100;
		String sql = "SELECT MAX (codRevista) + 1 AS codRevista FROM Revista";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			codigo = rs.getInt("codRevista");
		}
		rs.close();
		ps.close();
		return codigo;
	}
	
	public Revista ConsultaRevistas(Revista r) throws SQLException
	{
		
		String sql = " SELECT codRevista, codEditora, titulo, volume, numero, codCurso, codInstituicao FROM Revista WHERE codRevista = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, r.getCodRevista());
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			r.setCodRevista(rs.getInt("codRevista"));
			r.setCodEditora(rs.getInt("codEditora"));
			r.setTitulo(rs.getString("titulo"));
			r.setVolume(rs.getInt("volume"));
			r.setNumero(rs.getInt("numero"));
			r.setCodCurso(rs.getInt("codCurso"));
			r.setInstituicao(rs.getInt("codInstituicao"));			
		}
		rs.close();
		ps.close();
		return r;
	}
	
	public List<Revista> listaRevistas() throws SQLException
	{
		List<Revista> listaRevistas = new ArrayList<Revista>();
		String sql = "SELECT * FROM Revista ORDER BY titulo";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next())
		{
			Revista r = new Revista();
			r.setCodRevista(rs.getInt("codRevista"));
			r.setCodEditora(rs.getInt("codEditora"));
			r.setTitulo(rs.getString("titulo"));
			r.setVolume(rs.getInt("volume"));
			r.setNumero(rs.getInt("numero"));
			r.setCodCurso(rs.getInt("codCurso"));
			r.setInstituicao(rs.getInt("codInstituicao"));
			listaRevistas.add(r);
		}
		rs.close();
		ps.close();
		return listaRevistas;
	}

}